package Logica;



import movTeclado.mente;
import movTeclado.menteEnterprise;
import movTeclado.menteGalaga;
import movTeclado.menteGoei;
import movTeclado.menteZako;
import Entidades.*;
import GUI.*;


/**
 * Clase Nivel
* @author Jonathan Fritz - Santiago Salem - Kevin Schweitzer.
 */
public class Nivel extends Thread{

	private NaveEnemiga enemigo1;
	private Juego juego;
	private mente menteNave;
	private frameJuego frame;
	private int total;
	private int zako = 0;
	private int goei = 0;
	private int enterprise = 0;
	private int galaga = 0;
	private int cantEnemigos = 0;
	private boolean funcionando = true;
	private boolean seguir = true;
	
	private boolean primeraCreacionHecha = false;
	private boolean segundaCreacionHecha = false;
	private boolean terceraCreacionHecha = false;

	
	/**
	 * Constructor de la clase HalconMilenario.
	 *  @param j, indica el Juego.
	 *  @parame cantTotal, indica la cantidad de enemigos del nivel.
	 */
	public Nivel(Juego j, int cantTotal){
		juego=j;
		frame=juego.getFrameJuego();
		total = cantTotal;		
		this.start();
	}
		
	/**
	 * Comienza la ejecucion del nivel.
	 */
	public void run(){
		juego.getFrameJuego().getListaHilos().add(this);
		while (funcionando){
			controlarCreacion();
			
			if(total == 0 && cantEnemigos == 0){
				funcionando = false;
				juego.notificarVictoria();
			}
			System.out.println("Zako: "+zako);
			System.out.println("Goei: "+goei);
			System.out.println("Galaga: "+galaga);

		}
		juego.getFrameJuego().getListaHilos().remove(this);
	}
	
	/**
	 * Se encarga de la creacion de las naves enemigas.
	 */
	private void controlarCreacion(){
		//Crea las naves en 3 etapas. Cada etapa es realizada siempre que no haya sido
		//hecha antes y si la cantidad de enemigos es cero
		//de este modo una vez que se eliminen todos los enemigos creados por una etapa
		//recien en ese momento se crea la siguiente
		
		
		seguir = zako == 0 && goei == 0 && galaga == 0;
		if(total == 1 && seguir){
			crearNave("enterprise",1);	
		}
		else{
			if(!primeraCreacionHecha && seguir){
				crearNave("zako", 5);
				crearNave("goei",3);
				crearNave("galaga",1);				
				primeraCreacionHecha = true;
				seguir = false;
				System.out.println("FIN ETAPA 1");
			}
			if(primeraCreacionHecha && !segundaCreacionHecha  && seguir){
				crearNave("zako", 5);
				crearNave("goei",3);
				crearNave("galaga",2);
				segundaCreacionHecha = true;
				seguir = false;
				System.out.println("FIN ETAPA 2");


			}
			if(segundaCreacionHecha  && !terceraCreacionHecha && seguir){
				crearNave("zako", 5);
				crearNave("goei",4);
				crearNave("galaga",2);
				terceraCreacionHecha = true;
				System.out.println("FIN ETAPA 3");

			}			
		}	
	}
	
	
	
	
	//ESTO HAY QUE ARREGLARLO YA QUE DE VEZ EN CUANDO TIRA EN CANTEnemigos en negativo...
	/*private void controlarCreacion() {
		if(seguir){
			if(total>1 && cantEnemigos<5) {
					if(total >5 && zako <6){
						crearNave("zako",5);
					}
					else{
						crearNave("zako",total -1);
					}
					if(total >4 && goei <2){
						crearNave("goei",4);
					}
					else{
						crearNave("goei",total -1);
					}
					if(total >3 && galaga < 1){
						crearNave("galaga",3);
					}
					else{
						crearNave("galaga",total -1);
					}
			}
			else{
				if(cantEnemigos == 0){//Parte final del juego
					crearNave("enterprise",1);	
					total = 0;
					seguir = false;
				}
			}
		}
	}*/
		
	
	public void crearNave(String nombre, int nro){
		
		
		for (int i = 0; i < nro; i++) {
			switch(nombre){
			case "zako": enemigo1 = new zako(juego); 
						 menteNave = new menteZako();
						 setZako(1);
						 break;
			case "goei": enemigo1 = new goei(juego); 
			 			menteNave = new menteGoei();
			 			setGoei(1);
			 			break;
			case "galaga": enemigo1 = new galaga(juego,juego.getPlayer()); 
			 			menteNave = new menteGalaga();
			 			setGalaga(1);
			 			break;
			case "enterprise": enemigo1 = new enterprise(juego); 
			 					menteNave = new menteEnterprise();
			 					setEnterprise(1);
			 					break;
			
			
			}
			
			
			frame.getPanelNaves().add(enemigo1);
			juego.agregarEntidad(enemigo1);
			juego.getNavesEnemigas().add(enemigo1);				
			juego.getEntidadEnemiga().add(enemigo1);
				
			
			menteNave.setJuego(juego);
			menteNave.setNave(enemigo1);
			enemigo1.setMente(menteNave);
			menteNave.preparar();
			menteNave.jugar();
			
			
				
			try {
				Thread.sleep(1000);
			} 
			catch (Exception e) {}
		}
		total -= nro;

	}
	
	public void setZako(int nro){
		zako += nro;
		cantEnemigos += nro;
		System.out.println(cantEnemigos);


	}
	
	public void setGoei(int nro){
		goei += nro;
		cantEnemigos += nro;


	}
	
	public void setGalaga(int nro){
		galaga += nro;
		cantEnemigos += nro;

	}
	
	public void setEnterprise(int nro){
		enterprise +=nro;
		cantEnemigos += nro;


	}
	
}
